package com.zhangye.test.controller;


import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;




import com.alibaba.fastjson.JSON;
import com.zhangye.test.model.Admin;
import com.zhangye.test.model.AdminAuthority;
import com.zhangye.test.model.AdminRoles;
import com.zhangye.test.service.AdminAuthorityService;
import com.zhangye.test.service.AdminRolesAuthorityService;
import com.zhangye.test.service.AdminRolesService;
import com.zhangye.test.service.AdminService;
import com.zhangye.test.service.AdminUserRolesService;
import com.zhangye.test.util.PageInfo;
import com.zhangye.test.util.Result;


/**
 * 角色管理
 * 作者： 张叶
 * 创建时间：2018年5月16日  下午4:22:34
 */
@Controller
@RequestMapping("admin/role")
public class RoleController {
	
	@Autowired
	private AdminRolesService adminRolesService;
	
	@Autowired
	private AdminUserRolesService adminUserRolesService;
	
	@Autowired
	private AdminService adminService;
	
	@Autowired
	private AdminAuthorityService adminAuthorityService;
	
	@Autowired
	private AdminRolesAuthorityService adminRolesAuthorityService;
	
	
	/**
	 * 跳转角色列表页
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:07:40
	 */
	@RequestMapping("/list")
	public String toListPage() {
		return "admin/role/list";
	}
	

	/**
	 * 角色列表
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:07:31
	 */
	@ResponseBody
	@RequestMapping("/getRoleList")
	public JSON getRoleList(PageInfo pageInfo, Integer rows, Integer page, String sidx, String sord, Integer sType) {
		String where = "1=1";
		String orderStr = "";

		if (rows != null) {// 每页显示条数
			pageInfo.setPageSize(rows);
		}
		if (page != null) {// 当前页
			pageInfo.setPage(page);
		}
		if (sType != null) {
			pageInfo.setPage(1);
		}
		if (sidx != null && sidx != "") {// 排序字段
			orderStr += " order by " + sidx + " ";
			if (sord != null && sord != "") {// 排序
				orderStr += sord;
			}
		} else {
			orderStr += " ORDER BY AR_ID ASC";
		}

		Map<String, Object> map = new HashMap<String, Object>();
		List<Map<String, Object>> list = adminRolesService.getRoleList(pageInfo, where, orderStr);
		map.put("list", list);
		map.put("total", pageInfo.getTotalPage());
		return (JSON) JSON.toJSON(map);
	}

	/**
	 * 删除角色
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:03:01
	 * 1，根据ID，查找 管理员角色表，是否存在管理员
	 * 2，
	 */
	@ResponseBody
	@RequestMapping("/delete")
	public int delete(Long rId) {
		int result=0;
		if (rId != null) {
			int count = adminUserRolesService.getCountByRid(rId);
			if (count > 0) {
				return 2;
			}else{
				result = adminRolesService.deleteById(rId);
			}
		}
		return result;
	}

	/**
	 * 角色添加页面
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:07:50
	 */
	@RequestMapping("/add")
	public String toAddPage() {
		return "admin/role/add";
	}

	/**
	 * 添加时判断角色是否已存在
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:07:56
	 */
	@ResponseBody
	@RequestMapping("/isNameExist")
	public boolean checkName(String arName) {
		if (arName != null) {
			AdminRoles ar = adminRolesService.findByName(arName);
			if (ar != null) {
				return false;
			} else {
				return true;
			}
		}
		return false;
	}

	/**
	 * 添加角色
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:08:03
	 */
	@ResponseBody
	@RequestMapping("/save")
	public Result saveRole(String arName, String remarks) {
		Result result = new Result();
		result.code = 0;
		result.message = "添加失败！";
		Admin admin = adminService.getCurrent();
		if (arName != null && admin != null) {
			AdminRoles ar = new AdminRoles();
			ar.setArName(arName);
			ar.setArRemark(remarks);
			ar.setOperatoruser(admin.getRealname());
			int count = adminRolesService.save(ar);
			if (count > 0) {
				result.code = 1;
			}
		}
		return result;
	}

	/**
	 * 跳转角色修改页面
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:09:50
	 */
	@RequestMapping("/updatePage")
	public String toUpdatePage(Long rId, Model model) {
		if (rId != null) {
			AdminRoles role = adminRolesService.findById(rId);
			model.addAttribute("role", role);
		}
		return "admin/role/update";
	}

	
	/**
	 * 修改时验证名称是否已存在
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:09:57
	 */
	@ResponseBody
	@RequestMapping("/isExistName")
	public boolean isNameExist(Long rId, String arName) {
		if (rId != null) {
			AdminRoles role = adminRolesService.findById(rId);
			if (role != null && role.getArName().equals(arName)) {
				return true;
			} else {
				AdminRoles ar = adminRolesService.findByName(arName);
				if (ar != null) {
					return false;
				} else {
					return true;
				}
			}
		}
		return false;
	}

	
	/**
	 * 修改角色信息
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:10:04
	 */
	@ResponseBody
	@RequestMapping("/update")
	public Result update(String arName, Long rId, String arRemark) {
		Result result = new Result();
		Admin admin = adminService.getCurrent();
		result.code = 0;
		result.message = "修改失败！";
		if (rId != null && arName != null && admin != null) {
			AdminRoles role = adminRolesService.findById(rId);
			role.setArName(arName);
			role.setArRemark(arRemark);
			role.setOperatoruser(admin.getRealname());
			int count = adminRolesService.update(role);
			if (count > 0) {
				result.code = 1;
			}
		}
		return result;
	}

	/**
	 * 查看角色权限
	 * 作者： 张叶
	 * 创建时间：2017年12月26日  下午5:10:12
	 */
	@RequestMapping("/authorityPage")
	public String authorityPage(Long rId, Model model) {
		if(rId!=null){
			List<AdminAuthority> auList = adminAuthorityService.findAll();
			List<Map<String, Object>> roAuList = adminRolesAuthorityService.selectAuthorityByRoleid(rId);
			model.addAttribute("rId", rId);
			model.addAttribute("auList", auList);
			model.addAttribute("roAuList", roAuList);
		}
		return "admin/role/authority";
	}

	
	/**
	 * 修改角色权限
	 * 作者：张叶
	 * 时间：2016年9月7日 上午10:59:05
	 * rId 角色ID，idStr 权限ID
	 */
	@ResponseBody
	@RequestMapping(value = "/saveAuth", method = RequestMethod.POST)
	public Result saveassauthority(Long rId, String idStr) {
		Result result = new Result();
		result.code = 0;
		AdminRoles ar = adminRolesService.findById(rId);
		if (ar != null) {
			Long[] id = null;
			if (idStr != null && !"".equals(idStr)) {// 有选中的权限
				String[] str = idStr.split(",");
				// 循环便利选中权限
				id = new Long[str.length];
				for (int i = 0; i < str.length; i++) {
					if (str[i] != "") {
						Long auId = Long.parseLong(str[i]);
						id[i] = auId;
					}
				}
			}
			try {
				adminRolesService.updateAuthority(rId, id);
				result.code = 1;
			} catch (Exception e) {
				e.printStackTrace();
			}
		} else {
			result.code = 2;
			result.message = "此记录或已删除，修改失败";
		}
		return result;
	}
}
